package com.bh.ledger.mapper;

import com.bh.common.basemapper.RootMapper;
import com.bh.ledger.domain.JcLedgerDetail;
import com.bh.ledger.vo.JcCustomerLedgerDetail;
import com.bh.ledger.vo.JcLedgerDetailGenerateVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 台帐明细Mapper接口
 *
 * @author slx
 * @date 2023-04-24
 */
@Mapper
public interface JcLedgerDetailMapper extends RootMapper<JcLedgerDetail> {

    /**
     * 查询台帐明细列表
     *
     * @param jcLedgerDetail 台帐明细
     * @return 台帐明细集合
     */
    public List<JcLedgerDetail> selectJcLedgerDetailList(JcLedgerDetail jcLedgerDetail);

    /**
     * 查询台帐明细列表
     *
     * @param jcLedgerDetail 台帐明细
     * @return 台帐明细集合
     */
    public List<JcCustomerLedgerDetail> selectJcCustomerLedgerDetailList(JcCustomerLedgerDetail jcLedgerDetail);

    /**
     * 查询台帐
     *
     * @param orderId
     * @return
     */
    public List<JcLedgerDetail> selectJcLedgerDetailListByOrderId(@Param("orderId") Long orderId);

    /**
     * 查询台帐
     *
     * @param orderId
     * @return
     */
    public List<JcLedgerDetail> selectAutoAddJcLedgerDetailListByOrderId(@Param("orderId") Long orderId);

    /**
     * 查询台帐
     *
     * @param templateId
     * @return
     */
    public List<JcLedgerDetail> selectJcLedgerDetailListByTemplateId(@Param("templateId") Long templateId);

    /**
     * 查询台帐
     *
     * @param prescoId
     * @return
     */
    public List<JcLedgerDetail> selectByPrescoId(@Param("prescoId") Long prescoId);

    /**
     * 查询台帐
     *
     * @param jcDispatchId
     * @return
     */
    public List<JcLedgerDetail> selectJcLedgerDetailListByJcDispatchId(@Param("dispatchId") Long dispatchId);


    public List<JcLedgerDetail> selectNoUseJcLedgerDetailListByField1(@Param("field1") String filed1);


    public List<JcLedgerDetail> selectByCustomerIdAndRange(@Param("generateVo") JcLedgerDetailGenerateVo generateVo);


    public int deleteByShipmentId(@Param("shipmentIds") List<Long> shipmentIds);


    /**
     * 基于 orderId 数组 的删除方法
     */
    public int deleteByOrderIds(@Param("orderIds") List<Long> orderIds);

    /**
     * 批量删除台帐明细
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteJcLedgerDetailByJcShipmentIds(Long[] ids);


    /**
     * 通过运单模板主键删除台帐明细信息
     *
     * @param id 运单模板ID
     * @return 结果
     */
    public int deleteJcLedgerDetailByJcShipmentId(Long id);

    /**
     * 批量删除台帐明细
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteJcLedgerDetailByJcShipmentTemplateIds(Long[] ids);


    /**
     * 通过运单模板主键删除台帐明细信息
     *
     * @param id 运单模板ID
     * @return 结果
     */
    public int deleteJcLedgerDetailByJcShipmentTemplateId(Long id);

    /**
     * 反确认费用单据
     *
     * @param id
     * @return
     */
    public int unconfirmed(Long id);

    /**
     * 通过
     *
     * @param id 运单模板ID
     * @return 结果
     */
    public int deleteJcLedgerDetailByJcDispatchId(@Param("dispatchId") Long dispatchId);

}
